package com.suzka.service;

import com.suzka.pojo.DrugCharge;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 药品收费服务接口，定义了对药品收费记录的基本操作
 */
public interface DrugChargeService {

    /**
     * 查询所有药品收费记录
     * @return 药品收费记录列表，若无记录则返回空列表
     */
    List<DrugCharge> findAll();

    /**
     * 根据ID查询药品收费记录
     * @param id 药品收费记录ID
     * @return 对应的药品收费记录，若不存在则返回null
     */
    DrugCharge findById(Integer id);

    /**
     * 保存药品收费记录
     * @param drugCharge 待保存的药品收费记录对象
     * @return 保存成功返回true，失败返回false
     */
    boolean save(DrugCharge drugCharge);

    /**
     * 更新药品收费记录
     * @param drugCharge 待更新的药品收费记录对象
     * @return 更新成功返回true，失败返回false
     */
    boolean update(DrugCharge drugCharge);

    /**
     * 根据ID删除药品收费记录
     * @param id 待删除的药品收费记录ID
     * @return 删除成功返回true，失败返回false
     */
    boolean deleteById(Integer id);

    /**
     * 根据客户ID查询药品收费记录
     * @param customerId 客户ID
     * @return 该客户的药品收费记录列表，若无记录则返回空列表
     */
    List<DrugCharge> findByCustomerId(Integer customerId);

    /**
     * 根据药品ID查询收费记录
     * @param drugId 药品ID
     * @return 该药品的收费记录列表，若无记录则返回空列表
     */
    List<DrugCharge> findByDrugId(Integer drugId);

    /**
     * 根据日期范围查询药品收费记录
     * @param startDate 开始日期(包含)
     * @param endDate 结束日期(包含)
     * @return 指定日期范围内的药品收费记录列表，若无记录则返回空列表
     */
    List<DrugCharge> findByDateRange(LocalDateTime startDate, LocalDateTime endDate);
}
